Software piracy is a recognized and growing problem. Software program vendors may experience losses of revenue due to unauthorized distribution of pirated copies of the vendor's software programs. Such copies otherwise would have been properly licensed by the software program vendor, at the vendor's then current licensing rates.
In addition to the loss of licensing revenue from the distribution of pirated copies of a software program, software piracy also constitutes a threat to expose valuable trade secrets that may be embodied in a particular software program. A software program may have significant value, and a software program vendor may achieve a significant competitive advantage, out of the software program vendor's trade secrets that are embodied in the software program. When such trade secrets lose their confidentiality, the software program's value is diminished, and the software program vendor's competitive advantage is undermined.
A contributing cause to the software piracy problem is the fact that software programs consist of electronic files that usually must be arranged according to certain specifications for proper operation with known microprocessors and operating systems. Thus, such electronic files are vulnerable to modification by malicious users, known as “hackers” or “crackers.” Many software security mechanisms have evolved in an attempt to hinder the ability of hackers or crackers to overcome a software program vendor's license restrictions or to expose a software program vendor's trade secrets. However, such software security mechanisms often are too easily breached by a skilled hacker or cracker, or impose excessive runtime “overhead” on the software program. Thus, the software security industry has yet to develop a satisfactory mechanism or set of mechanisms to overcome the problem of software piracy.
For the foregoing reasons, it is desired to provide a software security mechanism to protect a software program from unauthorized modification or exploitation. The desired software security mechanism should be difficult for a hacker or cracker to detect and/or defeat, but should not impose excessive runtime overhead on the software program. It is further desired to provide a technique for automating the injection of the desired software security mechanism into a previously developed software program.